final public function encodeKeyScore( $key:String, $score:String ):String{
	var result:String, totalLength:int, count:int, nextKey:String, nextScore:String;
	result = '';
	totalLength = $key.length*2;
	while( totalLength - 1 > result.length ){
		if( result.length % 2 === 0 ){
			nextKey = $key.charAt( count );
			if( count >= $score.length ){
				nextScore = String( int( Math.random() * 9 ) );
			}else{
				nextScore = $score.charAt( count );
			}
			result += nextKey;
			++count;
		}else{
			result += nextScore;
		}
	}
	result += $score.length;
	return result;
}
final public function decodeKeyScore( $key:String ):Object{
	var i:int, j:int, result:Object, key:String, score:String, length:int;
	key = '';
	score = '';
	for( i = 0, j = $key.length ; i < j ; ++i ){
		if( i === ( j - 1 ) ){
			length = int( $key.charAt(i) );
		}else{
			if( i % 2 === 0 ){
				key += $key.charAt(i);
			}else{
				score += $key.charAt(i);
			}
		}
	} 
	result = {key:key, score:score.substr( 0, length )};
	return result;
}